#include"comm.h"


static int comm_msgget(int flag)
{
	key_t key=ftok(_PATH_,_PROJECT_ID_);
	if(ftok<0)
	{
		perror("ftok");
		exit(1);
	}
	int msg_id=msgget(key,flag);
	if(msg_id<0)
	{
		perror("msg_id");
		exit(1);
	}
	return msg_id;
}

int get_msgid()
{
	umask(0);
	int msg_id=comm_msgget(IPC_CREAT|IPC_EXCL|0666);
	return msg_id;
}

int use_msgid()
{
	int msg_id=comm_msgget(IPC_CREAT);
	return msg_id;
}

void msg_receive(int msg_id,msgvp*msg_vp,int msgvp_size,long mstype)
{
	memset(msg_vp->mmsg_buf,'\0',sizeof(msg_vp->mmsg_buf));
	if(msgrcv(msg_id,msg_vp,msgvp_size,mstype,0)<0)
	{	
		perror("msgsve");
	}
}

void msg_send(int msg_id,msgvp*msg_vp,int msgvp_size,char *str,int msgtype)
{
	memset(msg_vp->mmsg_buf,'\0',sizeof(msg_vp->mmsg_buf));
	strcpy(msg_vp->mmsg_buf,str);
	msg_vp->mtype=msgtype;
	if(msgsnd(msg_id,msg_vp,msgvp_size,0)<0)
	{
		perror("msgsnd");
	}
}

void msg_distory(int msg_id)
{
	if(msgctl(msg_id,IPC_RMID,0)<0)
	{
			perror("msgctl");
	}
}










